package com.atguigu.gmall.product.client;

import com.atguigu.gmall.model.product.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 商品微服务远程调用接口
 */
@FeignClient(name = "service-product",fallback = DegradedProductFeignclient.class)
public interface ProductFeignClient {

    //查询一二三级分类 Result 统一返回结果对象 Vue前端使用的状态码判断是否成功
    //inner 路径表示是内部资源  允许微服务之间远程调用，不允许浏览器直接调用
    @GetMapping("/api/product/inner/getBaseCategoryView/{category3Id}")
    public BaseCategoryView getBaseCategoryView(@PathVariable Long category3Id);


    //查询sku中的信息 sku_info    查询sku中的图片 sku_image
    @GetMapping("/api/product/inner/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable Long skuId);

    //价格是不可以进入缓存的因为价格需要实时变动，所以应该单独查询
    //单独查询价格
    @GetMapping("/api/product/inner/getPrice/{skuId}")
    public BigDecimal getPrice(@PathVariable Long skuId);

    //查询spu中总销售属性及属性值 同时选中一个默认商品
    @GetMapping("/api/product/inner/getSaleAttrAndValueAndChecked/{skuId}/{spuId}")
    public List<SpuSaleAttr> getSaleAttrAndValueAndChecked(
            @PathVariable Long skuId,
            @PathVariable Long spuId
    );


    //查询页面上查询组合和skuId之间的关系 {1|5|7 ：skuId，1|5|7 ：skuId} Json格式的字符串
    @GetMapping("/api/product/inner/getSkuValueIdsMap/{spuId}")
    public Map<String,String> getSkuValueIdsMap(@PathVariable Long spuId);

    //查询全部一二三分类视图
    @GetMapping("/api/product/getBaseCategoryViewList")
    public List<BaseCategoryView> getBaseCategoryViewList();

    //根据tmId查询一个品牌
    @GetMapping("/api/product/getBaseTrademark/{tmId}")
    public BaseTrademark getBaseTrademark(@PathVariable Long tmId);

    //根据skuId 查询sku_attr_value  base_attr_info  base_attr_value
    @GetMapping("/api/product/getSkuAttrValue/{skuId}")
    public List<SkuAttrValue> getSkuAttrValue(@PathVariable Long skuId);

}
